/**
 * 函数类型
 */

export {}

// 函数声明----------------------------------------------

// function func1 (a: number, b: number): string {
//   return 'func1'
// }
// // 实参个数与形参个数必须一致
// func1(1, 2)

// 可选参数
// function func1 (a: number, b?: number): string {
//   return 'func1'
// }
// func1(1)

// 参数默认值
// function func1 (a: number, b: number = 100): string {
//   return 'func1'
// }
// func1(1)

// ...rest方式传入任意数量的参数
function func1 (a: number, b: number = 100, ...rest: number[]): string {
  return 'func1'
}
func1(1, 2, 3, 4, 5)

// 函数表达式----------------------------------------------

const func2: (a: number, b: number) => string = function (a: number, b: number): string {
  return 'func2'
}

// 函数重载-------------------------------------------------

// 重载允许一个函数接受不同数量或类型的参数时，作出不同的处理。
// 函数重载的意义在于让人知道传入不同的参数得到不同的结果，如果传入的参数不同，但是得到的结果却相同，那么就不要使用函数重载

// reverse传入数字时返回反转的数字，传入字符串时返回反转的字符串
function reverse(x: number): number;
function reverse(x: string): string;

function reverse (x: number | string): number | string {
  if (typeof x === 'number') {
    return Number(x.toString().split('').reverse().join(''))
  }

  if (typeof x === 'string') {
    return x.split('').reverse().join('')
  }

  return ''
}
